package com.board.controller;


import cn.hutool.core.bean.BeanUtil;
import com.board.entity.Notice;
import com.board.form.AddNoticeForm;
import com.board.param.AddNoticeParam;
import com.board.service.NoticeService;
import com.board.util.JwtUtil;
import com.board.util.PageInfo;
import com.board.util.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.aspectj.weaver.ast.Not;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 维修工程的公告表 前端控制器
 * </p>
 *
 * @author 小叶
 * @since 2024年04月03日
 */
@RestController
@RequestMapping("/notice")
@Api(tags = "公告信息接口")
public class NoticeController {
    @Autowired
    private NoticeService noticeService;

    /**
     * 新增公告信息
     * @param form 新增公告的标题和内容
     * @param token 管理员token
     * @return 返回新增的公告信息
     */
    @PostMapping("/addNotice")
    @ApiOperation("新增公告信息")
    public Result addNotice(@RequestBody AddNoticeForm form, @RequestHeader String token){
        Integer adminId = (Integer) JwtUtil.getData(token, "id");
        Notice notice= noticeService.addNotice(BeanUtil.toBean(form, AddNoticeParam.class),adminId);
        return Result.success("新增公告成功",notice);
    }

    /**
     * 展示公告
     * @param noticeId 要展示的公告id
     * @return 返回展示的公告数据
     */
    @PostMapping("/showNotice")
    @ApiOperation("展示公告")
    public Result showNotice(Integer noticeId){
        Notice notice = noticeService.showNotice(noticeId);
        return Result.success("展示公告成功",notice);
    }

    /**
     * 隐藏公告
     * @param noticeId 要隐藏的公告id
     * @return 返回隐藏的公告数据
     */
    @PostMapping("/downNotice")
    @ApiOperation("隐藏公告")
    public Result downNotice(Integer noticeId){
        Notice notice =  noticeService.downNotice(noticeId);
        return Result.success("隐藏公告成功",notice);
    }

    /**
     * 删除公告
     * @param noticeId 要删除的公告id
     * @return 返回公告是否删除成功
     */
    @PostMapping("/deleteNotice")
    @ApiOperation("删除公告")
    public Result deleteNotice(Integer noticeId){
        noticeService.deleteNotice(noticeId);
        return Result.success("删除公告成功",null);
    }

    /**
     * 根据id查询公告
     * @param noticeId 要查询的公告id
     * @return 返回查询的数据
     */
    @GetMapping("/findNoticeById")
    @ApiOperation("根据id查询公告")
    public Result findNoticeById(Integer noticeId){
        Notice notice =  noticeService.findNoticeById(noticeId);
        return Result.success("根据id查询公告成功",null);
    }

    /**
     * 用户查询公告信息
     * @param pageNum 页码
     * @param pageSize 页数
     * @return 返回查询的数据
     */
    @GetMapping("/userFindNotice")
    @ApiOperation("用户查询公告信息")
    public Result userFindNotice(Integer pageNum,Integer pageSize){
        PageInfo<Notice> pageInfo= noticeService.userFindNotice(pageNum,pageSize);
        return Result.success("查询成功",pageInfo);
    }

    /**
     * 管理员查询公告信息
     * @param noticeTitle 要查询的公告标题
     * @param pageNum 页码
     * @param pageSize 页数
     * @return 返回查询的信息
     */
    @GetMapping("/adminFindNotice")
    @ApiOperation("管理员查询公告信息")
    public Result adminFindNotice(String noticeTitle,Integer pageNum,Integer pageSize){
        PageInfo<Notice> pageInfo= noticeService.adminFindNotice(noticeTitle,pageNum,pageSize);
        return Result.success("查询成功",pageInfo);
    }

}

